#include <QMainWindow>
#include <QTimer>
#include <QPixmap>
#include <QTimeEdit>
#include <QMap>
#include <QDialog>
#include <QListWidget>
#include <QMediaPlayer>
#include <QMediaPlaylist>

    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
QT_END_NAMESPACE


class FlowerSelectionDialog : public QDialog
{
    Q_OBJECT

public:
    explicit FlowerSelectionDialog(QWidget* parent = nullptr);
    QString selectedFlower() const;

private:
    QListWidget* flowerList;
};


class MusicSelectionDialog : public QDialog
{
    Q_OBJECT

public:
    explicit MusicSelectionDialog(QWidget* parent = nullptr);
    QString selectedMusic() const;
private:
    QListWidget* musicList;
};

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget* parent = nullptr);
    ~MainWindow();

private slots:
    void startCountdown();
    void updateCountdown();
    void saveToAlbum(); // 保存图片到相册
    void showAlbum();   // 显示相册
    void chooseFlower(); // 选择花种
    void chooseMusic(); // 选择背景音乐

private:
    Ui::MainWindow* ui;
    QTimer* timer;
    int remainingTime; // 剩余时间（秒）
    int totalTime;     // 总时间（秒）
    QMap<QString, QVector<QPixmap>> flowerStages; // 存储不同花种的生长阶段图片
    QList<QPixmap> album; // 存储相册中的图片
    QString currentFlower; // 当前选择的花种
    QMediaPlayer* mediaPlayer; // 媒体播放器
    QMediaPlaylist* playlist; // 媒体播放列表
    void updateFlowerImage();
    void loadFlowerStages(); // 加载花种的生长阶段图片
};

#endif // MAINWINDOW_H
#include "MainWindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QVBoxLayout>
#include <QLabel>
#include <QScrollArea>
#include <QListWidgetItem>
#include <QDialogButtonBox>
#include <QVBoxLayout>
#include <QListWidget>
#include <QPushButton>
#include <QFileDialog> // 添加文件对话框

// 花种选择对话框的实现
FlowerSelectionDialog::FlowerSelectionDialog(QWidget* parent)
    : QDialog(parent)
{
    setWindowTitle("选择花种");

    // 创建花种列表
    flowerList = new QListWidget(this);
    flowerList->addItem("绣球");
    flowerList->addItem("铃兰");
    flowerList->addItem("蒲公英");

    // 创建按钮框（确定和取消）
    QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
    connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); // 确定按钮
    connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); // 取消按钮

    // 设置布局
    QVBoxLayout* layout = new QVBoxLayout(this);
    layout->addWidget(flowerList);
    layout->addWidget(buttonBox);
    setLayout(layout);
}

QString FlowerSelectionDialog::selectedFlower() const
{
    QListWidgetItem* item = flowerList->currentItem();
    return item ? item->text() : QString(); // 返回当前选中的花种
}

// 音乐选择对话框的实现
MusicSelectionDialog::MusicSelectionDialog(QWidget* parent)
    : QDialog(parent)
{
    setWindowTitle("选择背景音乐");

    // 创建音乐列表
    musicList = new QListWidget(this);
    musicList->addItem("默认音乐");
    musicList->addItem("自定义音乐");

    // 创建按钮框（确定和取消）
    QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
    connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); // 确定按钮
    connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); // 取消按钮

    // 设置布局
    QVBoxLayout* layout = new QVBoxLayout(this);
    layout->addWidget(musicList);
    layout->addWidget(buttonBox);
    setLayout(layout);
}

QString MusicSelectionDialog::selectedMusic() const
{
    QListWidgetItem* item = musicList->currentItem();
    return item ? item->text() : QString(); // 返回当前选中的音乐
}

// MainWindow 的实现
MainWindow::MainWindow(QWidget* parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 初始化定时器
    timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, &MainWindow::updateCountdown);
    connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::startCountdown);

    // 加载花种的生长阶段图片
    loadFlowerStages();

    // 初始显示默认花种（绣球）
    currentFlower = "绣球";
    ui->flower->setPixmap(flowerStages[currentFlower][0]);

    // 设置 QTimeEdit 的格式为 MM:SS
    ui->timeEdit->setDisplayFormat("mm:ss");

    // 设置默认时间为 00:00
    ui->timeEdit->setTime(QTime(0, 0));

    // 连接保存按钮的点击事件
    connect(ui->save, &QPushButton::clicked, this, &MainWindow::saveToAlbum);

    // 连接显示相册按钮的点击事件
    connect(ui->show, &QPushButton::clicked, this, &MainWindow::showAlbum);

    // 连接选择花种按钮的点击事件
    connect(ui->chooseflower, &QPushButton::clicked, this, &MainWindow::chooseFlower);

    // 初始化媒体播放器和播放列表
    mediaPlayer = new QMediaPlayer(this);
    playlist = new QMediaPlaylist(this);
    mediaPlayer->setPlaylist(playlist);

    // 连接选择音乐按钮的点击事件
    connect(ui->choosemusic, &QPushButton::clicked, this, &MainWindow::chooseMusic);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::loadFlowerStages()
{
    // 加载绣球的生长阶段图片
    QVector<QPixmap> hydrangeaStages;
    hydrangeaStages.append(QPixmap(":/new/prefix1/FB11.png"));
    hydrangeaStages.append(QPixmap(":/new/prefix1/FB12.png"));
    hydrangeaStages.append(QPixmap(":/new/prefix1/FB13.png"));
    flowerStages["绣球"] = hydrangeaStages;

    // 加载铃兰的生长阶段图片
    QVector<QPixmap> lilyOfTheValleyStages;
    lilyOfTheValleyStages.append(QPixmap(":/new/prefix1/a1.jpg"));
    lilyOfTheValleyStages.append(QPixmap(":/new/prefix1/a2.jpg"));
    lilyOfTheValleyStages.append(QPixmap(":/new/prefix1/a3.jpg"));
    lilyOfTheValleyStages.append(QPixmap(":/new/prefix1/a4.jpg"));
    flowerStages["铃兰"] = lilyOfTheValleyStages;

    // 加载蒲公英的生长阶段图片
    QVector<QPixmap> dandelionStages;
    dandelionStages.append(QPixmap(":/new/prefix1/b1.jpg"));
    dandelionStages.append(QPixmap(":/new/prefix1/b2.jpg"));
    dandelionStages.append(QPixmap(":/new/prefix1/b3.jpg"));
    dandelionStages.append(QPixmap(":/new/prefix1/b4.jpg"));
    flowerStages["蒲公英"] = dandelionStages;
}

void MainWindow::startCountdown()
{
    // 获取用户输入的时间
    QTime time = ui->timeEdit->time();

    // 将时间转换为总秒数
    int seconds = time.minute() * 60 + time.second();

    // 检查输入是否有效
    if (seconds <= 0)
    {
        QMessageBox::warning(this, "Invalid Input", "Please enter a valid positive time.");
        return;
    }

    // 初始化倒计时
    remainingTime = seconds;
    totalTime = seconds;

    // 启动定时器
    timer->start(1000); // 1 second interval
}

void MainWindow::updateCountdown()
{
    remainingTime--;

    if (remainingTime >= 0)
    {
        // 更新 QTimeEdit 的显示内容
        QTime time(0, remainingTime / 60, remainingTime % 60);
        ui->timeEdit->setTime(time);

        // 更新花的图片
        updateFlowerImage();
    }
    else {
        timer->stop();
        QMessageBox::information(this, "Countdown Finished", "The flower has fully bloomed!");
    }
}

void MainWindow::updateFlowerImage()
{
    // 计算当前阶段
    int stage = (totalTime - remainingTime) * (flowerStages[currentFlower].size() - 1) / totalTime;
    if (stage >= flowerStages[currentFlower].size())
    {
        stage = flowerStages[currentFlower].size() - 1;
    }

    // 更新花的图片
    ui->flower->setPixmap(flowerStages[currentFlower][stage]);
}

void MainWindow::saveToAlbum()
{
    // 获取当前花的图片
    QPixmap currentImage = ui->flower->pixmap()->copy();

    // 将图片添加到相册
    album.append(currentImage);

    // 提示用户
    QMessageBox::information(this, "Success", "Image added to album!");
}

void MainWindow::showAlbum()
{
    // 创建一个新窗口来显示相册
    QDialog* albumDialog = new QDialog(this);
    albumDialog->setWindowTitle("Flower Album");

    // 创建一个滚动区域来显示图片
    QScrollArea* scrollArea = new QScrollArea(albumDialog);
    QWidget* container = new QWidget(scrollArea);
    QVBoxLayout* layout = new QVBoxLayout(container);

    // 遍历相册中的图片并添加到布局中
    for (const QPixmap& image : album) {
        QLabel* imageLabel = new QLabel(container);
        imageLabel->setPixmap(image);
        layout->addWidget(imageLabel);
    }

    // 设置滚动区域的属性
    container->setLayout(layout);
    scrollArea->setWidget(container);
    scrollArea->setWidgetResizable(true);

    // 设置对话框布局
    QVBoxLayout* dialogLayout = new QVBoxLayout(albumDialog);
    dialogLayout->addWidget(scrollArea);
    albumDialog->setLayout(dialogLayout);

    // 显示对话框
    albumDialog->exec();
}

void MainWindow::chooseFlower()
{
    // 打开花种选择对话框
    FlowerSelectionDialog dialog(this);
    if (dialog.exec() == QDialog::Accepted)
    {
        QString selected = dialog.selectedFlower();
        if (!selected.isEmpty())
        {
            currentFlower = selected;
            ui->flower->setPixmap(flowerStages[currentFlower][0]); // 显示初始阶段图片
        }
    }
}

void MainWindow::chooseMusic()
{
    // 打开音乐选择对话框
    MusicSelectionDialog dialog(this);
    if (dialog.exec() == QDialog::Accepted)
    {
        QString selected = dialog.selectedMusic();
        if (!selected.isEmpty())
        {
            if (selected == "默认音乐")
            {
                // 加载默认音乐
                playlist->clear();
                playlist->addMedia(QUrl(":/new/prefix1/frist music.mp3")); // 假设默认音乐在资源文件中
                mediaPlayer->play();
            }
            else if (selected == "自定义音乐")
            {
                // 打开文件对话框选择音乐文件
                QString fileName = QFileDialog::getOpenFileName(this, "选择音乐文件", "", "音频文件 (*.mp3 *.wav)");
                if (!fileName.isEmpty())
                {
                    playlist->clear();
                    playlist->addMedia(QUrl::fromLocalFile(fileName));
                    mediaPlayer->play();
                }
            }
        }
    }
}